﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// 实现一个函数组合器，允许将多个函数组合成一个函数。
// 任务:
// 定义一个委托 Func<int, int>，它表示接受一个 int 并返回一个 int。
// 创建一个 FunctionCombiner 类，它具有一个 Combine 方法，用于将多个 Func<int, int> 委托组合成一个新的 Func<int, int> 委托。
// 使用 FunctionCombiner 组合几个函数（例如，加倍、加三），并应用组合函数。
namespace CS_BEGINNER_TO_PROFICIENT.STD.DelegatedSTD
{
    public class FunctionCombiner
    {
        public static Func<int, int> Combine(params Func<int, int>[] funcs)
        {
            return x =>
            {
                foreach (var func in funcs)
                {
                    x = func(x);
                }
                return x;
            };
        }
    }

    public class DelegatedSTDP12
    {
        public static void Execute()
        {
            Func<int, int> doubleMultiply = x => x * 2;
            Func<int, int> add3 = x => x + 3;

            Func<int, int> func = FunctionCombiner.Combine(doubleMultiply, add3);
            Console.WriteLine(func(3));
        }
    }
}
